package com.wtgroup.demo.面试题.华为OD;

import java.util.Arrays;

/**
 * SLA(Service Level Agreement) 时间内内完成工单, 获得对应的积分, 超时完成不获得积分, 但必须完成.
 * 每个工单完成耗时 1h.
 * 求, 最大积分
 *
 * @author nisus
 * @version 0.1
 * @since 2023/5/31 10:14
 */
public class Q_工单调度策略 {

    // 没有对数器
    public static void main(String[] args) {
        int[][] tasks = new int[][]{
                {1, 6},
                {1, 7},
                {3, 2},
                {3, 1},
                {2, 4},
                {2, 5},
                {6, 1}
        };

        int res = maxScore(tasks.length, tasks);
        System.out.println(res);
    }

    // n 工单数子; arr[i] 工单 SLA,积分
    static int maxScore(int n, int[][] arr) {
        Arrays.sort(arr, (a, b) -> b[1] - a[1]);
        int[] dp = new int[n];
        int ans = 0;
        for (int[] task : arr) {
            int sla = task[0];
            int score = task[1];
            if (dp[sla] == 0) {
                dp[sla] = score;
                ans += score;
            } // else , 说明前面有更大的积分填过去了
        }

        return ans;
    }

}
